package cn.tedu.charging.cost.pojo.po;


import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

import java.math.BigDecimal;

/**
 * 充电数据
 * 为了解决本地独享map的问题
 * 把充电数据存储到ES
 */
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
//类似 plus @TableName 的功能 做表的映射
@Document(indexName = "charging_data_2409")
public class ChargingDataPO {

    @Id
    String id;

    /**
     * 订单号
     */
    String orderNo;

    /**
     * 用户id
     */
    Integer userId;

    /**
     * 枪id
     */
    Integer gunId;

    /**
     * 总花费
     */
    BigDecimal totalFee = BigDecimal.ZERO;


    /**
     * 保存总花费
     * 如果是第一次 直接 赋值 本次花费 设置 为总花费
     * 如果不是第一次 计算 上次的花费  +  本次花费
     *
     * @param totalFee
     */
    public void setTotalFee(BigDecimal totalFee) {
        //判断是否是第一次
        //if (isFirst()) {
            //直接赋值 本次花费 设置为 总花费
        //    this.totalFee = totalFee;
        //}else {
            // 本次花费 + 上次花费 设置为 总花费
            this.totalFee = this.totalFee.add(totalFee);
        //}
    }


    /**
     * 充电度数
     */
    Float chargingCapacity = 00F;

    /**
     * 获取充电度数
     * 如果是第一次 直接返回 设备同步的充电度数
     * 如果不是第一次 计算 设备同步的充电度数 - 上次充电度数
     * @param chargingCapacity 设备同步的充电度数
     * @return
     */
    public Float getChargingCapacity(Float chargingCapacity) {
        //判断是否是第一次
        //if (isFirst()) {
            //直接返回 设备同步的充电度数
        //    return chargingCapacity;
        //}else {
            //设备同步的充电度数 - 上次充电度数
            return chargingCapacity - this.chargingCapacity;
        //}
    }

    /**
     * 次数
     */
    Integer count = 0;

    /**
     * 次数加1
     * @return
     */
    public Integer incrCount() {
        return this.count = count + 1;
    }

    /**
     * 判断是否是第一次
     * 业务的逻辑 从 业务层Service 移动到了Pojo 数据层
     *
     * Pojo 普通java对象 简单的数据类 只有数据 没有业务逻辑
     *
     * 充血模型  对象 有数据  + 有业务
     * 贫血模型 数据对象 只有数据
     *
     *  BO business object 业务对象
     *
     *  DDD 领域驱动开发
     *
     *  域 充电数据就是一个 域
     *
     *  UserBO  更加的内聚
     * {
     *    String userName
     *    String password
     *
     *    public void login()
     *
     *    public void register()
     *
     *    public void logout()
     *
     * }
     *
     *
     * @return
     */
    public Boolean isFirst() {
        return count == 1;
    }

}
